
#include "MrpcConfig.h"
#include <cstdio>
#include <iostream>
#include <string>

void MrpcConfig::LoadConfigFile(const char * config_file){
    FILE *fp = fopen(config_file, "r");
    if(fp == nullptr){
        perror("fopen");
        exit(EXIT_FAILURE);
    }
    while(!feof(fp)){//  判断文件是否结束
        char buf[512] = {0};
        fgets(buf, 512, fp);// 读取一行
        std::string src_buf(buf);
        src_buf = Trim(buf);
        if(src_buf[0]=='#' || src_buf.empty()){
            // 说明是注释行或者空行
            continue;
        }
        int idx = src_buf.find('=');// 查找等号的位置
        if(idx == -1){
            continue;
        }
        std::string key = src_buf.substr(0,idx);
        key = Trim(key);
        int endidx = src_buf.find('\n');
        std::string value = src_buf.substr(idx+1,endidx-idx-1);
        value = Trim(value);
        m_config_map[key] = value;  
    }   
}

std::string MrpcConfig::Trim(std::string src_buf)
{
    int idx=src_buf.find_first_not_of(' ');
    if(idx!=-1)
    {
        src_buf=src_buf.substr(idx,src_buf.size()-idx);
    }
    // 去掉字符串后面多余的空格
    idx=src_buf.find_last_not_of(' ');
    if(idx!=-1)
    {
        // 说明字符串后面有空格
        src_buf=src_buf.substr(0,idx+1);
    }
    return src_buf;
}

std::string MrpcConfig::Load(const std::string& key){
    if(m_config_map.find(key) == m_config_map.end()){
        std::cout << "Key not found: " << key << std::endl;
        return "";
    }
    return m_config_map[key];
}

